﻿// Decompiled with JetBrains decompiler
// Type: Microsoft.InfoCards.GetKeyedHashRequest
// Assembly: infocard, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
// MVID: 8E14765A-6610-409A-BA36-099A0642905D
// Assembly location: E:\git\ALLIDA\windll\infocard.exe

using Microsoft.InfoCards.Diagnostics;
using System;
using System.Diagnostics;
using System.IO;
using System.Security.Principal;
using System.Text;

namespace Microsoft.InfoCards
{
  internal class GetKeyedHashRequest : ClientRequest
  {
    private int m_cryptoSession;
    private HashCryptoSession m_hashSession;

    public GetKeyedHashRequest(
      Process callingProcess,
      WindowsIdentity callingIdentity,
      IntPtr rpcHandle,
      Stream inArgs,
      Stream outArgs)
      : base(callingProcess, callingIdentity, rpcHandle, inArgs, outArgs)
    {
    }

    protected override void OnMarshalInArgs()
    {
      this.m_cryptoSession = new InfoCardBinaryReader(this.InArgs, Encoding.Unicode).ReadInt32();
      InfoCardTrace.ThrowInvalidArgumentConditional(0 == this.m_cryptoSession, "cryptoSession");
    }

    protected override void OnProcess()
    {
      this.m_hashSession = ((SymmetricCryptoSession) CryptoSession.Find(this.m_cryptoSession, this.CallerPid, this.RequestorIdentity.User)).GetKeyedHash();
    }

    protected override void OnMarshalOutArgs()
    {
      BinaryWriter bwriter = new BinaryWriter(this.OutArgs, Encoding.Unicode);
      this.m_hashSession.Write(bwriter);
      bwriter.Flush();
    }
  }
}
